package tools

import (
	"bufio"
	"fmt"
	"io"
	"net"
	"os"
	"path/filepath"
)

// GetFileName 从文件路径中截取文件名
func getFileName(filePath string) string {
	// 使用 filepath.Base 函数获取文件名
	return filepath.Base(filePath)
}

func (t Command) Server() {
	if len(os.Args) != 4 {
		fmt.Println("使用方法: yt server ip port")
		return
	}
	ip := os.Args[2]
	port := os.Args[3]

	// 监听指定地址和端口
	listener, err := net.Listen("tcp", ip+":"+port)
	if err != nil {
		fmt.Println("监听错误:", err)
		return
	}
	defer listener.Close()

	fmt.Println("服务端已启动，等待客户端连接...")

	// 接受客户端连接
	conn, err := listener.Accept()
	if err != nil {
		fmt.Println("接受连接错误:", err)
		return
	}
	defer conn.Close()

	fmt.Println("客户端已连接")

	// 读取文件名
	reader := bufio.NewReader(conn)
	fileName, err := reader.ReadString('\n')
	if err != nil {
		fmt.Println("读取文件名错误:", err)
		return
	}
	fileName = fileName[:len(fileName)-1] // 去掉换行符

	fileName = getFileName(fileName)
	// 创建文件
	file, err := os.Create(fileName)
	if err != nil {
		fmt.Println("创建文件错误:", err)
		return
	}
	defer file.Close()

	// 从连接读取数据并写入文件
	_, err = io.Copy(file, reader)
	if err != nil {
		fmt.Println("写入文件错误:", err)
		return
	}

	fmt.Println(fileName, "文件传输完成")
}
